WOLF core
WOLF: A Modular Estimation Framework for Robotics
XXXXXXXXXXXXXXXXXXXXXXXXvoid(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
manifold_wrapper.h
Go to the documentation of this file.
1// WOLF - Copyright (C) 2020-2026
2// Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
3// Authors: Joan Solà Ortega (jsola@iri.upc.edu) and
4// Joan Vallvé Navarro (jvallve@iri.upc.edu)
5// All rights reserved.
6//
7// This file is part of WOLF: http://www.iri.upc.edu/wolf
8// WOLF is free software: you can redistribute it and/or modify
9// it under the terms of the GNU General Public License version 3
10// as published by the Free Software Foundation.
11//
12// This program is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with this program. If not, see <http://www.gnu.org/licenses/>.
19#pragma once
20
21// Fwd refs
22namespace wolf
23{
24class LocalParametrizationBase;
25}
26
27// Ceres includes
28#include "core/common/wolf.h"
29#include "ceres/ceres.h"
30
31namespace wolf
32{
33class ManifoldWrapper : public ceres::Manifold
34{
35 private:
36 LocalParametrizationBasePtr local_parametrization_ptr_;
37
38 public:
39 ManifoldWrapper(LocalParametrizationBasePtr _local_parametrization_ptr);
40
41 ~ManifoldWrapper() override = default;
42
43 bool Plus(const double* x_raw, const double* delta_raw, double* x_plus_delta_raw) const override;
44
45 bool PlusJacobian(const double* x, double* jacobian) const override;
46
47 bool Minus(const double* x_raw, const double* y_raw, double* x_minus_y_raw) const override;
48
49 bool MinusJacobian(const double* x, double* jacobian) const override;
50
51 int AmbientSize() const override;
52
53 int TangentSize() const override;
54
55 LocalParametrizationBasePtr getLocalParametrization() const;
56};
57
58using ManifoldWrapperPtr = std::shared_ptr<ManifoldWrapper>;
59
60} // namespace wolf
61
63
64namespace wolf
65{
66inline ManifoldWrapper::ManifoldWrapper(LocalParametrizationBasePtr _local_parametrization_ptr)
67 : local_parametrization_ptr_(_local_parametrization_ptr)
68{
69}
70
72{
73 return local_parametrization_ptr_->getGlobalSize();
74}
75
77{
78 return local_parametrization_ptr_->getLocalSize();
79}
80
81inline LocalParametrizationBasePtr ManifoldWrapper::getLocalParametrization() const
82{
83 return local_parametrization_ptr_;
84}
85
86} // namespace wolf
Definition: manifold_wrapper.h:34
int AmbientSize() const override
Definition: manifold_wrapper.h:71
bool Minus(const double *x_raw, const double *y_raw, double *x_minus_y_raw) const override
Definition: manifold_wrapper.cpp:38
LocalParametrizationBasePtr getLocalParametrization() const
Definition: manifold_wrapper.h:81
bool PlusJacobian(const double *x, double *jacobian) const override
Definition: manifold_wrapper.cpp:31
ManifoldWrapper(LocalParametrizationBasePtr _local_parametrization_ptr)
Definition: manifold_wrapper.h:66
~ManifoldWrapper() override=default
int TangentSize() const override
Definition: manifold_wrapper.h:76
bool Plus(const double *x_raw, const double *delta_raw, double *x_plus_delta_raw) const override
Definition: manifold_wrapper.cpp:23
bool MinusJacobian(const double *x, double *jacobian) const override
Definition: manifold_wrapper.cpp:47
Definition: capture_base.h:23
std::shared_ptr< ManifoldWrapper > ManifoldWrapperPtr
Definition: manifold_wrapper.h:58